/* Copyright (C) 2021 Rain */

/* This file is part of XNIX. */

/* 
  XNIX is free software: you can redistribute it and/or modify 
  it under the terms of the GNU General Public License as published by 
  the Free Software Foundation, either version 3 of the License, or 
  (at your option) and later version. 
*/

/*
  XNIX is distributed in the hope that it will be useful, 
  but WITHOUT ANY WARRANTY; without even the implied warranty of 
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 
  GNU General Public License for more details. 
*/

/*
  You should have received a copy of the GNU General Public License 
   along with XNIX. If not, see <https://www.gnu.org/licenses/>.  
*/



#include <kernel/init.h>
#include <kernel/errno.h>
#include <kernel/types.h>

#include <kernel/console.h>
#include <kernel/pci.h>
#include <kernel/mm.h>

#include <kernel/int.h>
#include <kernel/panic.h>

#include <arch/x86/paging.h>
#include <modules/ahci.h>
#include <lib/string.h>


struct ahci_hba_mem *hba;


errno_t ahci_init(struct pci_header0 *hdr) {
	ahci_info("ahci initialized. \n");

	ahci_info("PCI BAR5: \t%q\n", hdr->bar5);

	hba = mapping((void *) (__uint64_t) hdr->bar5, PATT_DEVMM);

	ahci_info("HBA maps to %q. \n", hba);

	struct ahci_cmd_header *cmdlist;

	cmdlist = mapping((void *) (__uint64_t) hba->ports[0].cmd_list, PATT_DEVMM);

	ahci_info("port[0] command list maps to %q. \n", cmdlist);

	return 0;
}


